home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / games / oyatsu / src / pad.c < prev    next >
Text File  |  1999-11-22  |  2KB  |  107 lines

  1. /*****************************************
  2.  
  3.     推理パズル「おやつタイム」
  4.  
  5.             入力
  6.  
  7.  *****************************************/
  8.  
  9.  
  10. #include    <sys\iocs.h>
  11.  
  12. #include    "oyatsu.h"
  13. #include    "pad.h"
  14.  
  15.  
  16. static PAD    pad_data = 0xffff;        /* パッドの状態 */
  17. static PAD    pad_just;            /* 今回の変化 */
  18. static PAD    pad_rept;            /* リピート付き */
  19. static Bool    read_flag = TRUE;        /* 状態取得があったか */
  20. static int    pad_cnt = 16;            /* リピート用カウンタ */
  21.  
  22. Bool    esc_key  = FALSE;            /* ESCキー */
  23. Bool    esc_last = TRUE;
  24.  
  25.  
  26. /********************
  27.     パッド同期処理
  28.  ********************/
  29. void    pad_synch(void)
  30. {
  31.     int    k1;
  32.     PAD    last, last_j, last_r;
  33.  
  34.     last   = pad_data;                /* 前回の状態 */
  35.     last_j = pad_just;
  36.     last_r = pad_rept;
  37.     pad_data = 0x0000;
  38.     k1 = _iocs_ms_getdt();                /* マウスボタン入力 */
  39.     if ( k1 & 0xff00 ) {                /* 左ボタン */
  40.         pad_data |= PAD_A;
  41.     }
  42.     if ( k1 & 0x00ff ) {                /* 右ボタン */
  43.         pad_data |= PAD_B;
  44.     }
  45.  
  46.     pad_just = pad_data & ~last;            /* 変化データ */
  47.     pad_rept = pad_just;                /* リピート付き */
  48.     if ( pad_data == last ) {
  49.         if ( --pad_cnt == 0 ) {
  50.             pad_rept = pad_data;
  51.             pad_cnt = 8;
  52.         }
  53.     }
  54.     else {
  55.         pad_cnt = 24;
  56.     }
  57.     if ( !read_flag ) {
  58.         pad_just |= last_j;
  59.         pad_rept |= last_r;
  60.     }
  61.     read_flag = FALSE;
  62.  
  63.     if ( _iocs_bitsns(0) & 0x02 ) {            /* ESCキー */
  64.         esc_key  = !esc_last;
  65.         esc_last = TRUE;
  66.     }
  67.     else {
  68.         esc_key  = FALSE;
  69.         esc_last = FALSE;
  70.     }
  71. }
  72.  
  73. /*****************************
  74.     マウスカーソル位置取得
  75.     戻り値    x, y : 位置
  76.  *****************************/
  77. void    get_ms_pos(int* x, int* y)
  78. {
  79.     int    t;
  80.  
  81.     t = _iocs_ms_curgt();                /* マウスカーソル座標 */
  82.     *x = t/0x10000;
  83.     *y = t & 0xffff;
  84. }
  85.  
  86. /****************************
  87.     パッド状態取得
  88.     戻り値    パッド状態
  89.  ****************************/
  90. PAD    get_pad(void)                    /* そのまま */
  91. {
  92.     return    pad_data;
  93. }
  94.  
  95. PAD    get_push(void)                    /* 押した直後 */
  96. {
  97.     read_flag = TRUE;
  98.     return    pad_just;
  99. }
  100.  
  101. PAD    get_rept(void)                    /* リピート付き */
  102. {
  103.     read_flag = TRUE;
  104.     return    pad_rept;
  105. }
  106.  
  107. /********** End of File **************************************************/